package com.tanhua.api.db;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.tanhua.db.User;
import com.tanhua.mapper.UserMapper;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Date;

/**
 *
 * 服务提供者
 *
 *      @EnableDubbo(scanBasePackages = "权限定类名")
 *
 *          位置      ：启动类上方
 *
 *          服务提供者: 扫描包发现@Service注解,并将对应的类创建实例存放到IOC容器, 并发布到Zookeeper中
 *
 *          属性：
 *              scanBasePackages    基础包扫描 com.itheima
 *
 *      @Service     将serice层的类创建类对象存放到IOC容器中并发布到Zookeeper中
 *
 *          将此实现类发布成服务,使用Dubbo的注解
 *
 *          位置：类上方  -Dserver.port=8081
 *          属性：
 *              loadbalance: 负载均衡   @Service(loadbalance = "roundrobin")
 *                  random: 随机
 *                  roundrobin: 轮询
 *                  leastactive: 最活跃的
 *
 *              timeout：配置当前服务的响应超时时间   @Service(timeout = 2000)
 * 服务消费者
 *
 *      @EnableDubbo(scanBasePackages = "包路径")
 *
 *          位置      ：启动类上方
 *
 *          服务消费者: 扫描@Reference注解,完成代理类的注入
 *
 *          属性：
 *              scanBasePackages    基础包扫描
 *
 *  @Reference   注入服务接口(Dubbo生成)的代理类对象
 *
 *          位置      ：成员变量上方
 *          属性：
 *              check：注入该服务对象代理类时无需检测提供者是否存在   @Reference(check = false)
 *
 *              根据接口创建代理类,在代理类中远程过程调用目标对象
 *              @Reference(timeout = 毫秒,mock = "服务降级类 全限定类名")
 *              @Reference(timeout = 2000,mock = "com.itheima.mock.HelloServiceMock")
 *              timeout：访问提供者的方法超过 n 秒后,进行服务降级（远程过程调用的超时时间）
 *              		结合重试次数使用   重试次数*N秒
 *              mock: 设置服务降级类
 *          需要：
 *              服务降级类:写一个类,实现与服务接口
 *              当访问远程的HelloService中的方法时,如果访问超时,则调用此类中对应的方法进行服务降级
 */
@Service
public class UserApiImpl implements UserApi{

    @Autowired
    private UserMapper userMapper;


    //保存用户 (返回id)
    @Override
    public Long saveUser(User user) {
        user.setCreated(new Date());
        user.setUpdated(new Date());

        userMapper.insert(user);
        return user.getId();

    }


    //根据手机号做查询
    @Override
    public User findByPhone(String phone) {
        QueryWrapper<User> qw = new QueryWrapper<>();
        QueryWrapper<User> phone1 = qw.eq("phone", phone);
        System.out.println(phone1.toString());
        System.out.println("根据手机号做查询qw:  "+qw.toString());
        return userMapper.selectOne(qw);

    }
}
